home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / phagexsources.lha / source / NewPMCPlasma1.s < prev    next >
Text File  |  1994-07-09  |  9KB  |  559 lines

  1. ; Resourced from Old PureMetalCoders demo, enhanced by phagex '92
  2.  
  3.     Opt    c-
  4.     Section    "Base Code",Code_c
  5.  
  6. PlasmaColour    = $c0000
  7. CopperList0    = $c2000
  8. CopperList1    = $d0000
  9. Lines    = 160
  10.  
  11.     IncDir    Df1:
  12.  
  13. Start    Movem.l    d0-d7/a0-a6,-(sp) 
  14.     Bsr    KillSys      
  15.     
  16.     Lea    CopperList0,a0 
  17.     Lea    HardWare,a6      
  18.     Move.l    a0,Cop1Lc(a6)      
  19.     Move.w    #$83c0,DMACon(a6)
  20.  
  21.     Lea    CopperList0,a0
  22.     Lea    CopperList1,a1
  23.     Move.l    #$1000200,(a0)+    
  24.     Move.l    #$1000200,(a1)+    
  25.     Move.l    #$4001fffe,d0    
  26.     Move.w    #199,d6
  27. SetColLoop1    Move.l    d0,(a0)+
  28.     Move.l    d0,(a1)+
  29.     Move.w    #44,d7
  30. SetColLoop2    Move.l    #$01800000,(a0)+
  31.     Move.l    #$01800000,(a1)+
  32.     Dbf    d7,SetColLoop2
  33.     Add.l    #$1000000,d0
  34.     Dbf    d6,SetColLoop1    
  35.     Move.l    #$fffffffe,(a0)+
  36.     Move.l    #$fffffffe,(a1)+
  37.  
  38.     Bsr    DoRGBSine
  39.  
  40. Loop    Bsr    VBL
  41.     Bsr    DoubleBuffer
  42.     Bsr    DoWobble
  43.     Bsr    DoPlasma
  44.     Btst    #6,$Bfe001    
  45.     Bne    Loop      
  46.         
  47.     Bsr    ReturnSys      
  48.     Movem.l    (sp)+,d0-d7/a0-a6 
  49.     Moveq    #0,d0      
  50.     Rts
  51.  
  52. DoubleBuffer    Lea    CopperPt(pc),a0
  53.     Move.l    0(a0),d0
  54.     Move.l    4(a0),d1
  55.     Move.l    d0,4(a0)
  56.     Move.l    d1,0(a0)
  57.     Move.l    d0,$Dff080
  58.     Rts
  59.  
  60. DoRGBSine    Move.w    #0,d2
  61.     Lea    PlasmaColour,a0
  62. RGBSineLoop    Lea    RedSine(pc),a2
  63.     Bsr    SineWave
  64.     Move.w    d4,0(a0)
  65.     Lea    GreenSine(pc),a2
  66.     Bsr    SineWave
  67.     Asl.w    #4,d4
  68.     Move.w    d4,2(a0)
  69.     Lea    BlueSine(pc),a2
  70.     Bsr    SineWave
  71.     Asl.w    #8,d4
  72.     Move.w    d4,4(a0)    
  73.     Move.w    #0,6(a0)
  74.     Addq    #8,a0
  75.     Add.w    #1,d2
  76.     Cmp.w    #610,d2
  77.     Bne    RGBSineLoop
  78.     Rts
  79.  
  80. SineWave    Movem.l    d0-d3/a0-a1,-(sp)
  81.     Lea    SineData(pc),a0
  82.     Move.l    00(a2),d0
  83.     Move.l    04(a2),d1
  84.     Move.l    08(a2),d2
  85.     Move.l    12(a2),d3
  86.     And.l    #$7fe,d0
  87.     And.l    #$7fe,d1
  88.     And.l    #$1fe,d2
  89.     And.l    #$1fe,d3
  90.     Add.l    d2,d0
  91.     Add.l    d3,d1
  92.     Move.l    d0,0(a2)
  93.     Move.l    d1,4(a2)
  94.     Move.w    (a0,d0),d4
  95.     Add.w    (a0,d1),d4
  96.     Add.l    #512,d4
  97.     Asr.w    #6,d4
  98.     And.w    #$f,d4
  99.     Movem.l    (sp)+,d0-d3/a0-a1
  100.     Rts
  101.  
  102. RedSine    Dc.l    04
  103.     Dc.l    34
  104.     Dc.l    14
  105.     Dc.l    22
  106.  
  107. GreenSine    Dc.l    42
  108.     Dc.l    22
  109.     Dc.l    8
  110.     Dc.l    2
  111.  
  112. BlueSine    Dc.l    34
  113.     Dc.l    28
  114.     Dc.l    10
  115.     Dc.l    14
  116.  
  117. DoWobble    Move.l    WobbleSine0(pc),d0
  118.     Move.l    WobbleSine1(pc),d1
  119.     Move.l    WobbleSine2(pc),d2
  120.     Move.l    WobbleSine3(pc),d3
  121.     Lea    PlasmaSine(pc),a4
  122.     Lea    PlasmaSine+$100(pc),a5
  123.     Move.l    a4,d4
  124.     Move.l    a5,d5
  125.     Move.l    #$100,d7
  126.     Lea    WobbleSine0Pt(pc),a1
  127.     Lea    WobbleSine1Pt(pc),a2
  128.     Add.l    d0,(a1)
  129.     Cmp.l    (a1),d5
  130.     Bhi    FindSine1
  131.     Sub.l    d7,(a1)
  132.     Bra    FoundSine1
  133.  
  134. FindSine1    Cmp.l    (a1),d4
  135.     Bls    FoundSine1
  136.     Add.l    d7,(a1)
  137. FoundSine1    Add.l    d1,(a2)
  138.     Cmp.l    (a2),d5
  139.     Bhi    FindSine2
  140.     Sub.l    d7,(a2)
  141.     Bra    FoundSine2
  142.  
  143. FindSine2    Cmp.l    (a2),d4
  144.     Bls    FoundSine2
  145.     Add.l    d7,(a2)
  146. FoundSine2    Move.l    CopperPt(pc),a0
  147.     Add.l    #$5,a0
  148.     Move.l    WobbleSine0Pt(pc),a1
  149.     Move.l    WobbleSine1Pt(pc),a2
  150.     Lea    $100,a3
  151.     Move.w    #Lines-1,d0
  152.     Move.l    #$b8,d1
  153.     Moveq.l    #1,d4
  154.     Moveq.l    #0,d6
  155.     Moveq.l    #$1b,d7
  156. DoWobbleLoop    Add.l    d2,a1
  157.     Cmp.l    d5,a1
  158.     Bcs    EndWobTab
  159.     Sub.l    a3,a1
  160. EndWobTab    Add.l    d3,a2
  161.     Cmp.l    d5,a2
  162.     Bcs    SetWobble
  163.     Sub.l    a3,a2
  164. SetWobble    Move.b    (a1),d6
  165.     Add.b    (a2),d6
  166.     Lsr.b    d4,d6
  167.     Lsl.b    d4,d6
  168.     Add.b    d7,d6
  169.     Move.b    d6,(a0)
  170.     Add.l    d1,a0
  171.     Dbra    d0,DoWobbleLoop
  172.     Rts    
  173.  
  174. DoPlasma    Move.l    PlasmaSine0(pc),d0
  175.     Move.l    PlasmaSine1(pc),d4
  176.     Move.l    PlasmaSine2(pc),d1
  177.     Move.l    PlasmaSine3(pc),d5
  178.     Move.l    PlasmaSine4(pc),d2
  179.     Move.l    PlasmaSine5(pc),d6
  180.     Move.l    PlasmaSine6(pc),d3
  181.     Move.l    PlasmaSine7(pc),d7
  182.     Lea    PlasmaSine0Pt(pc),a0
  183.     Lea    PlasmaSine1Pt(pc),a1
  184.     Lea    PlasmaSine2Pt(pc),a2
  185.     Lea    PlasmaSine3Pt(pc),a3
  186.     Lea    PlasmaColour,a4
  187.     Lsl.l    #1,d0
  188.     Lsl.l    #1,d1
  189.     Lsl.l    #1,d2
  190.     Lsl.l    #1,d3
  191.     Lsl.l    #1,d4
  192.     Lsl.l    #1,d5
  193.     Lsl.l    #1,d6
  194.     Lsl.l    #1,d7
  195.     Add.l    d0,(a0)
  196.     Cmp.l    #PlasmaSine+$2040,(a0)
  197.     Bcs    GetRedSine
  198.     Sub.l    #$1f40,(a0)
  199.     Bra.s    GotRedSine
  200.  
  201. GetRedSine    Cmp.l    #PlasmaSine+$100,(a0)
  202.     Bcc    GotRedSine
  203.     Add.l    #$1f40,(a0)
  204. GotRedSine    Add.l    d1,(a1)
  205.     Cmp.l    #PlasmaSine+$2040,(a1)
  206.     Bcs    GetGreenSine
  207.     Sub.l    #$1f40,(a1)
  208.     Bra.s    GotGreenSine
  209.  
  210. GetGreenSine    Cmp.l    #PlasmaSine+$100,(a1)
  211.     Bcc    GotGreenSine
  212.     Add.l    #$1f40,(a1)
  213. GotGreenSine    Add.l    d2,(a2)
  214.     Cmp.l    #PlasmaSine+$2040,(a2)
  215.     Bcs    GetBlueSine
  216.     Sub.l    #$1f40,(a2)
  217.     Bra.s    GotBlueSine
  218.  
  219. GetBlueSine    Cmp.l    #PlasmaSine+$100,(a2)
  220.     Bcc    GotBlueSine
  221.     Add.l    #$1f40,(a2)
  222. GotBlueSine    Add.l    d3,(a3)
  223.     Cmp.l    #PlasmaSine+$2040,(a3)
  224.     Bcs    SinesFound
  225.     Sub.l    #$1f40,(a3)
  226.     Bra.s    SetNewSine
  227.  
  228. SinesFound    Cmp.l    #PlasmaSine+$100,(a3)
  229.     Bcc    SetNewSine
  230.     Add.l    #$1f40,(a3)
  231. SetNewSine    Move.l    (a0),a0
  232.     Move.l    (a1),a1
  233.     Move.l    (a2),a2
  234.     Move.l    (a3),a3
  235.     Move.l    CopperPt(pc),d2
  236.     Add.l    #$a,d2
  237.     Move.l    a4,d3
  238.     Bsr    WaitBlitter
  239.     Move.w    #6,$Dff064
  240.     Move.w    #6,$Dff062
  241.     Move.w    #6,$Dff060
  242.     Move.w    #$b6,$Dff066
  243.     Move.l    #-1,$Dff044
  244.     Move.w    #$ffe,$Dff040
  245.     Move.w    #0,$Dff042
  246.     Move.l    a6,-(sp)
  247.     Lea    XCount(pc),a6
  248.     Move.w    #0,(a6)
  249.     Move.l    (sp)+,a6
  250. CheckSine1    Add.l    d4,a0
  251.     Cmp.l    #PlasmaSine+$2040,a0
  252.     Bcs    CheckSine2
  253.     Sub.l    #$1f40,a0
  254. CheckSine2    Add.l    d5,a1
  255.     Cmp.l    #PlasmaSine+$2040,a1
  256.     Bcs    CheckSine3
  257.     Sub.l    #$1f40,a1
  258. CheckSine3    Add.l    d6,a2
  259.     Cmp.l    #PlasmaSine+$2040,a2
  260.     Bcs    CheckSine4
  261.     Sub.l    #$1f40,a2
  262. CheckSine4    Add.l    d7,a3
  263.     Cmp.l    #PlasmaSine+$2040,a3
  264.     Bcs    SetRGBBlit
  265.     Sub.l    #$1f40,a3
  266. SetRGBBlit    Moveq.l    #0,d0
  267.     Move.w    (a0),d0
  268.     Move.w    (a1),d1
  269.     Add.w    d1,d0
  270.     Lsr.w    #1,d0
  271.     Lsl.w    #3,d0
  272.     Move.l    d3,a4
  273.     Add.l    #2,d3
  274.     Add.l    d0,a4
  275.     Move.w    (a1),d0
  276.     Move.w    (a2),d1
  277.     Add.w    d1,d0
  278.     Lsr.w    #1,d0
  279.     Lsl.w    #3,d0
  280.     Move.l    d3,a5
  281.     Add.l    #2,d3
  282.     Add.l    d0,a5
  283.     Move.w    (a2),d0
  284.     Move.w    (a3),d1
  285.     Add.w    d1,d0
  286.     Lsr.w    #1,d0
  287.     Lsl.w    #3,d0
  288.     Move.l    d3,a6
  289.     Add.l    #2,d3
  290.     Add.l    d0,a6
  291.     Bsr    WaitBlitter
  292.     Move.l    a4,$Dff050
  293.     Move.l    a5,$Dff04c
  294.     Move.l    a6,$Dff048
  295.     Move.l    d2,$Dff054
  296.     Move.w    #(Lines*64)+1,$Dff058
  297.     Sub.l    #6,d3
  298.     Add.l    #4,d2
  299.     Move.l    a6,-(sp)
  300.     Lea    XCount(pc),a6
  301.     Add.w    #1,(a6)
  302.     Move.w    (a6),d0
  303.     Move.l    (sp)+,a6
  304.     Cmp.w    #$2d,d0
  305.     Bne    CheckSine1
  306.     Bsr    WaitBlitter
  307.     Rts    
  308.     
  309. WaitBlitter    Btst    #$6,$Dff002
  310.     Bne    WaitBlitter
  311.     Rts
  312.  
  313. VBL    Move.l    $Dff004,d0
  314.     And.l    #$1ff00,d0
  315.     Cmp.l    #$13000,d0
  316.     Bne    VBL
  317.     Rts
  318.  
  319. KillSys    Bsr.s    SysWait    
  320.  
  321.     Move.l    $4,a6    
  322.     Lea    GFXName(pc),a1    
  323.     Moveq    #0,d0    
  324.     Jsr    -552(a6)    
  325.         
  326.     Lea    OldCop1(pc),a5
  327.     Move.l    $26(a0),$0(a5)    
  328.     Move.l    $32(a0),$4(a5)    
  329.     
  330.     Lea    HardWare,a6
  331.     Move.w    IntEnaR(a6),d0    
  332.     Move.w    DMAConR(a6),d1  
  333.     Or.w    #$8000,d0    
  334.     And.w    #$03ff,d1    
  335.     Or.w    #$8000,d1    
  336.     Move.w    d0,$8(a5)    
  337.     Move.w    d1,$a(a5)    
  338.     
  339.     Move.w    #$7fff,IntEna(a6) 
  340.     Move.w    #$7fff,DMACon(a6) 
  341.     Rts
  342.  
  343. SysWait    Move.w    #15,d7    
  344. SysWaitLoop    Move.l    #$05000,d1    
  345.     Bsr.s    WaitVBL    
  346.     Bsr.s    DoWaitVBL    
  347.     Dbf    d7,SysWaitLoop    
  348.     Rts
  349.  
  350. DoWaitVBL    Move.l    #$03000,d1    
  351. WaitVBL    Movem.l    d0-d1/a6,-(sp)    
  352.     Lea    HardWare,a6    
  353. WaitVBLLoop    Move.l    VPosR(a6),d0    
  354.     And.l    #$1ff00,d0    
  355.     Cmp.l    d1,d0    
  356.     Bne.s    WaitVBLLoop    
  357.     Movem.l    (sp)+,d0-d1/a6    
  358.     Rts        
  359.  
  360. ReturnSys    Lea    HardWare,a6    
  361.     Move.w    OldIntEna(pc),IntEna(a6)
  362.     Move.w    OldDMACon(pc),DMACon(a6)
  363.     Move.l    OldCop1(pc),Cop1lc(a6)
  364.     Move.l    OldCop2(pc),Cop2lc(a6)
  365.     Rts
  366.  
  367. GFXName    Dc.b    "graphics.library",0
  368.     Even
  369. OldCop1    Dc.l    0    
  370. OldCop2    Dc.l    0    
  371. OldIntEna    Dc.w    0    
  372. OldDmaCon    Dc.w    0    
  373. Screen    Dc.l    $c0000    
  374.  
  375. XCount    Dc.w    0
  376.  
  377. WobbleSine0    Dc.l    13
  378. WobbleSine1    Dc.l    8
  379. WobbleSine2    Dc.l    11
  380. WobbleSine3    Dc.l    3
  381.  
  382. WobbleSine0Pt    Dc.l    PlasmaSine
  383. WobbleSine1Pt    Dc.l    PlasmaSine
  384.  
  385. CopperPt    Dc.l    CopperList0
  386. CopperPt1    Dc.l    CopperList1
  387.  
  388. PlasmaSine0    Dc.l    $64
  389. PlasmaSine1    Dc.l    $36
  390. PlasmaSine2    Dc.l    $10
  391. PlasmaSine3    Dc.l    $23
  392. PlasmaSine4    Dc.l    $52
  393. PlasmaSine5    Dc.l    $8
  394. PlasmaSine6    Dc.l    $22
  395. PlasmaSine7    Dc.l    $33
  396.  
  397. PlasmaSine0Pt    Dc.l    PlasmaSine+$100
  398. PlasmaSine1Pt    Dc.l    PlasmaSine+$100
  399. PlasmaSine2Pt    Dc.l    PlasmaSine+$100
  400. PlasmaSine3Pt    Dc.l    PlasmaSine+$100
  401.  
  402. TabVar1    Dc.l    0
  403. TabVar2    Dc.l    0
  404. TabVar3    Dc.l    0
  405. TabVar4    Dc.l    0
  406. TabVar5    Dc.l    0
  407. TabVar6    Dc.l    0
  408. TabVar7    Dc.l    0
  409. TabVar8    Dc.l    0
  410.  
  411. Cmv    Macro
  412.     Dc.w    \2,\1
  413.     EndM
  414.     
  415. Cwt    Macro
  416.     Dc.w    (\1*$100)+$01,$fffe
  417.     EndM    
  418.  
  419. Pal    Macro
  420.     Dc.w    $ffe1,$fffe
  421.     EndM    
  422.  
  423. EndCop    Macro
  424.     Dc.w    $ffff,$fffe
  425.     EndM    
  426.  
  427. PlasmaSine    Incbin    df0:SysData/PMC.Sine1
  428. SineData    Incbin    df0:SysData/Sine1024Bs.Dat
  429.     Incbin    df0:SysData/Sine1024Bs.Dat
  430.  
  431.  
  432.  
  433. ****Custom Chip Registers****
  434.  
  435. Hardware    = $Dff000
  436.  
  437. ;Control Registers
  438.  
  439. Dmaconr    = $002
  440. Vposr    = $004
  441. Vhposr    = $006
  442. Joy0dat    = $00A
  443. Joy1dat    = $00C
  444. Clxdat    = $00E
  445. Intenar    = $01C
  446. Intereqr    = $01E
  447. Copcon    = $02E
  448.  
  449. ;Blitter Registers
  450.  
  451. Bltcon0    = $040
  452. Bltcon1    = $042
  453. Bltafwm    = $044
  454. Bltalwm    = $046
  455. Bltcpth    = $048
  456. Bltcptl    = $04A
  457. Bltbpth    = $04C
  458. Bltbptl    = $04E
  459. Bltapth    = $050
  460. Bltaptl    = $052
  461. Bltdpth    = $054
  462. Bltdptl    = $056
  463. Bltsize    = $058
  464. Bltcmod    = $060
  465. Bltbmod    = $062
  466. Bltamod    = $064
  467. Bltdmod    = $066
  468. Bltcdat    = $070
  469. Bltbdat    = $072
  470. Bltadat    = $074
  471.  
  472. ;Copper Registers
  473.  
  474. Cop1lc    = $080
  475. Cop1lch    = $080
  476. Cop1lcl    = $082
  477. Cop2lc    = $084
  478. Cop2lch    = $084
  479. Cop2lcl    = $086
  480. Copjmp1    = $088
  481. Copjmp2    = $08A
  482. Diwstrt    = $08E
  483. Diwstop    = $090
  484. Ddfstrt    = $092
  485. Ddfstop    = $094
  486. Dmacon    = $096
  487. Clxcon    = $098
  488. Intena    = $09A
  489. Intreq    = $09C
  490.  
  491. ;BitPlane Registers 
  492.  
  493. BplCon0    = $100
  494. BplCon1    = $102
  495. BplCon2    = $104
  496. BplMod1    = $108
  497. BplMod2    = $10a
  498.  
  499. BplPt0h    = $0e0
  500. BplPt0l    = $0e2
  501. BplPt1h    = $0e4
  502. BplPt1l    = $0e6
  503. BplPt2h    = $0e8
  504. BplPt2l    = $0ea
  505. BplPt3h    = $0ec
  506. BplPt3l    = $0ee
  507. BplPt4h    = $0f0
  508. BplPt4l    = $0f2
  509. BplPt5h    = $0f4
  510. BplPt5l    = $0f6
  511.  
  512. ;Colour Registers
  513.  
  514. Color00    = $180
  515. Color01    = $182
  516. Color02    = $184
  517. Color03    = $186
  518. Color04    = $188
  519. Color05    = $18a
  520. Color06    = $18c
  521. Color07    = $18e
  522. Color08    = $190
  523. Color09    = $192
  524. Color10    = $194
  525. Color11    = $196
  526. Color12    = $198
  527. Color13     = $19a
  528. Color14     = $19c
  529. Color15     = $19e
  530. Color16     = $1a0
  531. Color17     = $1a2
  532. Color18     = $1a4
  533. Color19     = $1a6
  534. Color20     = $1a8
  535. Color21     = $1aa
  536. Color22     = $1ac
  537. Color23     = $1ae
  538. Color24     = $1b0
  539. Color25     = $1b2
  540. Color26     = $1b4
  541. Color27     = $1b6
  542. Color28     = $1b8
  543. Color29     = $1ba
  544. Color30     = $1bc
  545. Color31     = $1be
  546.  
  547. EcsNop    = $1fe
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.